package conta;

import excecao.ExcecaoSaqueInvalido;
import excecao.ExcecaoValorNegativo;

public class Poupanca extends Conta {

	private static final float TARIFA_CONSULTA = 1.1f;
	private int quantidadeConsultas = 0;

	public Poupanca(int numero, String proprietario, float saldo) {
		super(numero, proprietario, saldo);
	}

	public void reajustar(float reajuste) throws ExcecaoValorNegativo {
		if (reajuste < 0)
			throw new ExcecaoValorNegativo("Valor Negativo.");

		depositar(((getSaldo() / 100f) * reajuste));

	}

	public String listarDados() {
		return "Tipo da Conta: " + getTipoConta() + "\nNumero da conta: "
				+ getNumero() + "\nProprietario: " + getProprietario()
				+ "\nSaldo: " + getSaldo()
				+ "\nQuantidade de consultas realizadas: "
				+ this.quantidadeConsultas + "\nTarifa por consulta excedente:"
				+ TARIFA_CONSULTA;
	}

	public String getTipoConta() {
		return "POUPANCA";
	}

	@Override
	public float getSaldo() throws ExcecaoSaqueInvalido {

		if (super.permissoesEspeciaisHabilitadas()) {
			return super.getSaldo();
		}

		quantidadeConsultas++;
		if (quantidadeConsultas > 2) {
			if (super.getSaldo() > TARIFA_CONSULTA) {
				sacar(TARIFA_CONSULTA);
				return super.getSaldo();
			} else {
				throw new ExcecaoSaqueInvalido(
						"Valor de saque nao pode ser maior que o saldo");
			}
		} else {
			return super.getSaldo();
		}

	}

}
